/**
 * 返回重写dispatch的方法
 * @param  {...any} funcs 执行完第一层函数的中间件数组
 * @returns 重写dispatch的方法
 */
export default function compose(...funcs) {
  // return function (dispatch) {
  //   // 从后往前重写dispatch，那么执行时按中间件的传递顺序执行
  //   for (let i = funcs.length - 1; i >= 0; i--) {
  //     dispatch = funcs[i](dispatch);
  //   }

  //   // 返回重写后的dispatch
  //   return dispatch;
  // };

  return function (dispatch) {
    return funcs.reduceRight((next, func) => func(next), dispatch);
  };
}